package com.ruoyi.common.core.domain.entity.socket.bean;

import com.ruoyi.common.constant.socket.DeviceTypeContant;
import com.ruoyi.common.core.domain.entity.system.SysBoat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 电池组状态信息。
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BatteryInfo extends BaseDataPiece {
    /**
     * 设备自检状态 4个bit。取值范围：0-15，可能取值：0：无操作，1：正常，2：异常，15：无效值 。
     */
    private byte selfTestStatus;
    /**
     * 电池电压 2个字节。分辨率：0.01V，默认值：0.
     */
    private int batteryVoltage;
    /**
     * 电池电流 2个字节 其值可能为负数。分辨率：0.01A，默认值：0. 负数表示放电方向电流，正数表示充电方向电流，32767表示0A。
     */
    private double batteryCurrent;
    /**
     * 允许最大输出功率 2个字节。分辨率：1W。
     */
    private int allowedMaximumOutputPower;
    /**
     * SOC(电池电量百分比) 1个字节。分辨率：1%。
     */
    private byte soc;
    /**
     * 剩余放电时间 2个字节。分辨率：1min
     */
    private int remainingUsableTime;
    /**
     * 最高温度 1个字节。分辨率：1℃，127表示0℃
     */
    private int maximumTemperature;
    /**
     * 最低温度 1个字节。分辨率：1℃，127表示0℃
     */
    private int minimumTemperature;
    /**
     * 电池告警状态 2个bit。 可能值：0：无操作，1：正常，2：异常，3：无效值
     */
    private byte alarmStatus;
    /**
     * 电池电压状态 2个bit。 可能值：0：电压正常，1：电压过低，3：电压过高，3：无效值
     */
    private byte voltageStatus;
    /**
     * 电池电流状态 2个bit。 0：无操作，1：电流正常，2：过流保护，3：无效值
     */
    private byte currentStatus;
    /**
     * 电池温度状态 2个bit。 0：温度正常，1：低温保护，2：过温保护，3：无效值
     */
    private byte temperatureStatus;
    /**
     * 电池SOC(电池电量百分比)状态  2个bit。 0：无操作，1：正常，2：异常，3：无效值
     */
    private byte socStatus;
    /**
     * 电池高温充电限流状态  2个bit。 0：无操作，1：正常，2：异常，3：无效值
     */
    private byte limitCurrentStatus;

    private SysBoat sysBoat;

    public BatteryInfo(byte systemCode, byte deviceCode) {
        super(systemCode, deviceCode);
    }

    @Override
    public int getDataPieceLength() {
        return 66;
    }

    @Override
    public void setDeviceType() {
        deviceType = DeviceTypeContant.BatteryInfo;
    }
}
